package com.fy.fyspace.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.fy.fyspace.common.result.Result;
import com.fy.fyspace.model.dto.user.UserLoginDTO;
import com.fy.fyspace.model.dto.user.UserQueryDTO;
import com.fy.fyspace.model.dto.user.UserRegisterDTO;
import com.fy.fyspace.model.entity.User;
import com.fy.fyspace.model.vo.user.LoginUserVO;
import com.fy.fyspace.model.vo.user.UserStatisticsVO;

import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletResponse;

public interface UserService extends IService<User> {

    /**
     * 用户注册
     *
     * @param userRegisterDTO
     * @return
     */
    long userRegister(UserRegisterDTO userRegisterDTO);

    /**
     * 用户登录
     *
     * @param userLoginDTO
     * @return
     */
    LoginUserVO userLogin(UserLoginDTO userLoginDTO, HttpSession httpSession);

    /**获取当前登录用户
     *
     * @param httpSession
     * @return
     */

    LoginUserVO getLoginUser(HttpSession httpSession);

    /**
     * 修改用户密码
     *
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     * @param httpSession 会话信息
     * @return 是否修改成功
     */
    boolean updatePassword(String oldPassword, String newPassword, HttpSession httpSession);

    /**
     * 修改用户名称
     *
     * @param userName    新的用户名称
     * @param httpSession 会话信息
     * @return 是否修改成功
     */
    boolean updateUserName(String userName, HttpSession httpSession);

    /**
     * 修改用户简介
     *
     * @param userProfile 新的用户简介
     * @param httpSession 会话信息
     * @return 是否修改成功
     */
    boolean updateUserProfile(String userProfile, HttpSession httpSession);

    /**获取用户列表
     *
     * @param userQueryDTO
     * @return
     */
    Result getUserList(UserQueryDTO userQueryDTO);

    /**
     * 获取用户统计信息
     *
     * @param httpSession 会话信息
     * @return 用户统计信息
     */
    UserStatisticsVO getUserStatistics(HttpSession httpSession);

    /**
     * 重置密码
     * @param email 邮箱
     * @param password 新密码
     * @param confirmPassword 确认密码
     * @param emailCode 邮箱验证码
     * @param httpSession 会话信息
     * @return 是否重置成功
     */
    boolean resetPassword(String email, String password, String confirmPassword, String emailCode, HttpSession httpSession);

    /**
     * 获取用户邮箱
     * @return
     */
    Result getUserEmail();

    /**
     * 修改用户邮箱
     * @param email
     * @return
     */
    Result updateUserEmail(String email);

    /**
     * 导出指定月份、指定状态的用户信息表
     * @param isForbid 状态（0-正常，1-禁用）
     * @param month 月份（yyyy-MM）
     * @param response HttpServletResponse
     */
    void exportUserExcel(Integer isForbid, String month, HttpServletResponse response);

//    Result destroyUser(Long userId);
}
